home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 2 / DOS031.dsk / MAZE.bas < prev    next >
BASIC Source File  |  2012-02-16  |  4KB  |  113 lines

  1. 0  LIST 25900
  2. 1  FOR X = 1 TO 2000: NEXT X
  3. 4  REM  'MAZE' BY GORDON CAMPBELL     (416) 499-1012
  4. 5  REM    CONV PET => APPLE BY      KEITH FALKNER
  5. 6  REM  ALGORITHM BY PAUL WENNBERG
  6. 7  REM  NOV, 79 KILOBAUD
  7. 8  DIM XL%(23): FOR I = 0 TO 7:XL%(I) = 1024 +128 *I:XL%(I +8) = 1064 +128 *I:XL%(I +16) = 1104 +128 *I: NEXT 
  8. 9  REM   ABOVE ENABLES POKES TO   APPLE'S SCREEN DIRECTLY
  9. 10  TEXT : HOME : INVERSE : HTAB 18: PRINT "MAZE": NORMAL : PRINT 
  10. 20 I = 0:J = 0:NN = 0:MM = 0:K = 0:L1 = 0:D1 = 0
  11. 30 S = 0:T = 0:E% = 0:F% = 1:G% = 2:H% = 3:TN = 0
  12. 40 X =  RND(1)
  13. 42  VTAB 5: PRINT "PRESENTLY I WILL DRAW A MAZE FOR YOU.   THE WALLS ARE DARK; THE PATH IS BRIGHT."
  14. 50  PRINT " PR# WHEN I FINISH DRAWING THE MAZE, YOU CAN"
  15. 52  PRINT "TRACE A PATH FROM 'S' (START) TO 'F'"
  16. 54  PRINT "(FINISH). USE THE 2, 4, 6, AND 8 KEYS"
  17. 56  PRINT "TO MOVE. 2=DOWN 4=LEFT 6=RIGHT 8=UP."
  18. 66  PRINT " PR# HAVE FUN."
  19. 68  PRINT " PR# PRESS ANY KEY TO CONTINUE."
  20. 70  POKE  -16368,0
  21. 80  IF  PEEK( -16384) <128  THEN 80
  22. 90  POKE  -16368,0: HOME 
  23. 110 W = 21:L = 13: REM  DIMENSIONS
  24. 120 N = 2 *W +1:M = 2 *L +1
  25. 130  DIM  A%(N,M), L2%(500), D2%(500)
  26. 135  GOTO 150
  27. 140  FOR I = G% TO N -F%: FOR J = G% TO M -F%:A%(I,J) = E%
  28. 145  NEXT : NEXT 
  29. 150  FOR I = F% TO N:A%(I,F%) = F%:A%(I,M) = F%: NEXT 
  30. 160  FOR I = F% TO M:A%(F%,I) = F%:A%(N,I) = F%: NEXT 
  31. 170 NN = G% * INT( RND(12/7) *(W -G%)) +H%
  32. 180 MM = G% * INT( RND(12/7) *(L -G%)) +H%
  33. 190 A%(NN,MM) = F%:K = E%
  34. 200  POKE XL%(MM -3) +NN -3,32
  35. 210  IF A%(NN -G%,MM) = E%  THEN 320
  36. 220  IF A%(NN +G%,MM) = E%  THEN 320
  37. 230  IF A%(NN,MM -G%) = E%  THEN 320
  38. 240  IF A%(NN,MM +G%) = E%  THEN 320
  39. 250  IF K = F%  THEN 560
  40. 260  IF D2%(K) = 1  THEN NN = NN +L2%(K)
  41. 270  IF D2%(K) = 2  THEN NN = NN -L2%(K)
  42. 280  IF D2%(K) = 3  THEN MM = MM +L2%(K)
  43. 290  IF D2%(K) = 4  THEN MM = MM -L2%(K)
  44. 300 K = K -F%
  45. 310  GOTO 210
  46. 320 L1 = G% * INT( RND(12/7) *H%) +G%
  47. 330  IF L1 = 8  THEN 320
  48. 340 D1 =  INT( RND(12/7) *4) +F%
  49. 350  IF D1 = 5  THEN 340
  50. 360  IF D1 >G%  THEN 410
  51. 370 S =  -F%
  52. 380  IF D1 = G%  THEN S = F%
  53. 390 T = E%
  54. 400  GOTO 440
  55. 410 S = E%
  56. 420 T =  -F%
  57. 430  IF D1 = 4  THEN T = F%
  58. 440  FOR I = G% TO L1  STEP 2
  59. 450  IF A%(NN +S *I,MM +T *I) = F%  THEN 320
  60. 460  NEXT 
  61. 470  FOR I = F% TO L1
  62. 480 A%(NN +S *I,MM +T *I) = F%
  63. 485  POKE XL%(MM +T *I -3) +NN +S *I -3,32
  64. 490  NEXT 
  65. 500 NN = NN +S *L1
  66. 510 MM = MM +T *L1
  67. 520 K = K +F%
  68. 530 L2%(K) = L1
  69. 540 D2%(K) = D1
  70. 550  GOTO 210
  71. 560  REM  ... PICK START & FINISH
  72. 630  GOSUB 1900
  73. 650  POKE J,6: REM  F FOR FINISH
  74. 660  GOSUB 1900
  75. 670 J% = J
  76. 680  POKE J,19: REM  S FOR START
  77. 710  REM  GET A KEY, AND CHECK IT
  78. 720 K% =  PEEK( -16384): IF K% <128  THEN 720
  79. 725  POKE  -16368,0:K% = K% -176: IF K% < >2  AND K% < >4  AND K% < >6  AND K% < >8  THEN 720
  80. 740  REM AT LINE (J1%) COL (J2%)   OR MEMORY ADDRESS J
  81. 750 N1% = J1% -(K% = 8) +(K% = 2):N2% = J2% -(K% = 4) +(K% = 6)
  82. 760  IF N1% <0  OR N1% >23  OR N2% <0  OR N2% >38  THEN 1100
  83. 770 N% = XL%(N1%) +N2%: IF  PEEK(N%) >127  THEN 1100
  84. 780  POKE J%,43: REM + @ OLD SPOT
  85. 790  IF  PEEK(N%) = 6  THEN 1500
  86. 800  POKE N%,42: REM * @ NEW SPOT
  87. 810 J1% = N1%:J2% = N2%:J% = N%:TN = TN +1: GOTO 710
  88. 1100 A$ = "BLOCKED": GOSUB 1600
  89. 1110  FOR J = 1 TO 1000: NEXT 
  90. 1120 A$ = "       ": GOSUB 1600
  91. 1130  GOTO 710
  92. 1500  REM  ... MADE IT!!!
  93. 1510 A$ = "YOU DID IT!"
  94. 1520  GOSUB 1600
  95. 1560  FOR J = 1 TO 3000: NEXT 
  96. 1570  GOTO 5000
  97. 1600  VTAB 1: HTAB 40
  98. 1610  FOR J = 1 TO  LEN(A$)
  99. 1620  PRINT  MID$ (A$,J,1)" PR#  GR ";
  100. 1630  NEXT 
  101. 1640  RETURN 
  102. 1900 J1% = 1 +23 * RND(1):J2% = 1 +38 * RND(1)
  103. 1910 J = XL%(J1%) +J2%: IF  PEEK(J) < >32  THEN 1900
  104. 1920  IF J - INT(J/40) *40 = 39  THEN 1900
  105. 1930  RETURN 
  106. 5000  HOME : VTAB 8: PRINT "YOU TOOK "TN" STEPS TO SOLVE IT."
  107. 5020  POKE  -16368,0
  108. 5040  PRINT " PR#  PR# PRESS ANY KEY FOR ANOTHER MAZE."
  109. 5100  ON ( PEEK( -16384) <128) GOTO 5100: POKE  -16368,0: RUN 
  110. 6000  REM THE PROGRAM WAS WRITTEN    FOR A COMMODORE PET.
  111. 6100  REM THIS EXPLAINS WHY IT     USES POKES AND PEEKS TO     ADDRESS THE SCREEN.
  112. 6200  REM CALL KEITH FALKNER FOR     THE PROGRAM TO LOAD PET     TAPES ON AN APPLE. 
  113. 25900  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>           <CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>FROM:  APPLE-CAN<CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J>